01. 介绍

C++ 优化技巧

接下来是 C++ 优化的实战部分。你会学到一些代码优化策略,并使用它们来提升 C++ 程序的速度。

但请记住,程序优化不仅包括编程语言,还涉及其他方面。程序运行速度还取决于硬件、编译器以及所选的计算机算法。越熟悉这些不同方面,你在优化方面的工具选择就越多。下面简要总结了为什么这些方面都很重要。

硬件

部分硬件可能会有限制,拖慢代码速度。例如,计算三角函数时,处理器可能使用较慢的软件近似。如果使用 小角度近似 ,代码运行可能更快。

嵌入式硬件可能内存较小,或使用 16 或 32 位架构,而不是 64 位架构。在 16 位架构上使用 64 位整数时,编译器虽然可能支持,但效率很可能不高。

编译器

很多编译器都会至少优化部分代码。例如,如果 CPU 能展开 for 循环,避免检查条件语句,就能够提升效率:

// for loop
for (int i = 0; i < 5; i++) {
     std::cout << i << "\n";
}

// for loop unrolled
std::cout << 0 << "\n";
std::cout << 1 << "\n";
std::cout << 2 << "\n";
std::cout << 3 << "\n";
std::cout << 4 << "\n";

展开的版本运行速度更快,因为展开后,就不用检查 i < 5 是否为真。要全面了解编译器的功能,可以阅读这篇 文章

算法

有些算法比其他算法更快。一个常见的例子是排序算法。例如, quicksort bubble sort 速度更快。

还有一点是需要记住的:C++ 库非常方便,但这并不代表其使用的算法是最快的,尤其是针对你的个人情况。如果你了解深层的原理,就能找到更多的方法提升效率。

C++

现在,我们开始优化 C++。你会学到一些技巧,并练习如何使用它们。课程结束时,你将有机会优化 C++ 直方图滤波器。

以下是学习内容预览:你是否知道,每次调用函数时,C++ 都会把输入变量复制到内存中?看一下这个例子:

#include <iostream>

int addition(int a, int b);

int main() {

    int x, y;
    x = 5;
    y = 7;

    std::cout << addition(x, y) << "\n";

}

int addition(int a, int b) {
    return a + b;
}

和我们预期的一样,C++ 把 x 和 y 变量放到内存中。

当你调用 addition 函数时,C++ 接下来还会把 a 和 b 变量放入内存。实际上,尽管 x 和 y 的值可以直接用,C++ 又把 x 和 y 复制了一遍。

对于一个 32 位的整数,这可能不是问题。但是,一旦你开始处理较大的变量,如二维向量时,额外的读取过程就会拖慢程序。

在本课中,你会学到如何在这些情况下提升代码速度。